package org.jsola.hr.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.jsola.core.dto.BaseDTO;

import java.math.BigDecimal;
import java.util.Date;
import javax.validation.constraints.NotNull;

import static org.jsola.hr.example.SalaryBillExample.E_CHECK_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_CHECK_TIME;
import static org.jsola.hr.example.SalaryBillExample.E_COMPANY_ID;
import static org.jsola.hr.example.SalaryBillExample.E_DEDUCTION;
import static org.jsola.hr.example.SalaryBillExample.E_DEP_ID;
import static org.jsola.hr.example.SalaryBillExample.E_DEP_NAME;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_ID;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_IN_COMPANY;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_NAME;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_NO;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_PF;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_SOC;
import static org.jsola.hr.example.SalaryBillExample.E_EMP_TAX;
import static org.jsola.hr.example.SalaryBillExample.E_MONTH;
import static org.jsola.hr.example.SalaryBillExample.E_PHONE;
import static org.jsola.hr.example.SalaryBillExample.E_PHONE_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_POSITION_ID;
import static org.jsola.hr.example.SalaryBillExample.E_POSITION_NAME;
import static org.jsola.hr.example.SalaryBillExample.E_READ_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_READ_TIME;
import static org.jsola.hr.example.SalaryBillExample.E_SALARY_AMOUNT;
import static org.jsola.hr.example.SalaryBillExample.E_SALARY_BASIC;
import static org.jsola.hr.example.SalaryBillExample.E_SALARY_REAL;
import static org.jsola.hr.example.SalaryBillExample.E_SEND_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_SEND_TIME;
import static org.jsola.hr.example.SalaryBillExample.E_SEND_TYPE;
import static org.jsola.hr.example.SalaryBillExample.E_SORT;
import static org.jsola.hr.example.SalaryBillExample.E_TABLE_ID;
import static org.jsola.hr.example.SalaryBillExample.E_WECHAT_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_WITHDRAWN_STATUS;
import static org.jsola.hr.example.SalaryBillExample.E_WITHDRAWN_TIME;
import static org.jsola.hr.example.SalaryBillExample.E_YEAR;
import static org.jsola.hr.example.SalaryBillExample.M_COMPANY_ID_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_COMPANY_ID_NOT_NULL;
import static org.jsola.hr.example.SalaryBillExample.M_DEP_ID_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_DEP_NAME_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_EMP_ID_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_EMP_NAME_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_EMP_NO_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_MONTH_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_PHONE_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_POSITION_ID_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_POSITION_NAME_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_TABLE_ID_MAX;
import static org.jsola.hr.example.SalaryBillExample.M_YEAR_MAX;
import static org.jsola.hr.example.SalaryBillExample.N_CHECK_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_CHECK_TIME;
import static org.jsola.hr.example.SalaryBillExample.N_COMPANY_ID;
import static org.jsola.hr.example.SalaryBillExample.N_DEDUCTION;
import static org.jsola.hr.example.SalaryBillExample.N_DEP_ID;
import static org.jsola.hr.example.SalaryBillExample.N_DEP_NAME;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_ID;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_IN_COMPANY;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_NAME;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_NO;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_PF;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_SOC;
import static org.jsola.hr.example.SalaryBillExample.N_EMP_TAX;
import static org.jsola.hr.example.SalaryBillExample.N_MONTH;
import static org.jsola.hr.example.SalaryBillExample.N_PHONE;
import static org.jsola.hr.example.SalaryBillExample.N_PHONE_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_POSITION_ID;
import static org.jsola.hr.example.SalaryBillExample.N_POSITION_NAME;
import static org.jsola.hr.example.SalaryBillExample.N_READ_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_READ_TIME;
import static org.jsola.hr.example.SalaryBillExample.N_SALARY_AMOUNT;
import static org.jsola.hr.example.SalaryBillExample.N_SALARY_BASIC;
import static org.jsola.hr.example.SalaryBillExample.N_SALARY_REAL;
import static org.jsola.hr.example.SalaryBillExample.N_SEND_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_SEND_TIME;
import static org.jsola.hr.example.SalaryBillExample.N_SEND_TYPE;
import static org.jsola.hr.example.SalaryBillExample.N_SORT;
import static org.jsola.hr.example.SalaryBillExample.N_TABLE_ID;
import static org.jsola.hr.example.SalaryBillExample.N_WECHAT_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_WITHDRAWN_STATUS;
import static org.jsola.hr.example.SalaryBillExample.N_WITHDRAWN_TIME;
import static org.jsola.hr.example.SalaryBillExample.N_YEAR;

/**
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "新增【工资条】的参数")
@Data
public class SalaryBillAddDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = N_TABLE_ID, example = E_TABLE_ID)
    @Length(max = 32, message = M_TABLE_ID_MAX)
    private String tableId;

    @ApiModelProperty(notes = N_EMP_IN_COMPANY, example = E_EMP_IN_COMPANY)
    private Boolean empInCompany;

    @ApiModelProperty(notes = N_EMP_ID, example = E_EMP_ID)
    @Length(max = 32, message = M_EMP_ID_MAX)
    private String empId;

    @ApiModelProperty(notes = N_YEAR, example = E_YEAR)
    @Length(max = 32, message = M_YEAR_MAX)
    private String year;

    @ApiModelProperty(notes = N_MONTH, example = E_MONTH)
    @Length(max = 32, message = M_MONTH_MAX)
    private String month;

    @ApiModelProperty(notes = N_SALARY_AMOUNT, example = E_SALARY_AMOUNT)
    private BigDecimal salaryAmount;

    @ApiModelProperty(notes = N_SALARY_REAL, example = E_SALARY_REAL)
    private BigDecimal salaryReal;

    @ApiModelProperty(notes = N_SEND_TYPE, example = E_SEND_TYPE)
    private Integer sendType;

    @ApiModelProperty(notes = N_SEND_STATUS, example = E_SEND_STATUS)
    private Boolean sendStatus;

    @ApiModelProperty(notes = N_READ_STATUS, example = E_READ_STATUS)
    private Boolean readStatus;

    @ApiModelProperty(notes = N_CHECK_STATUS, example = E_CHECK_STATUS)
    private Boolean checkStatus;

    @ApiModelProperty(notes = N_WITHDRAWN_STATUS, example = E_WITHDRAWN_STATUS)
    private Boolean withdrawnStatus;

    @ApiModelProperty(notes = N_SEND_TIME, example = E_SEND_TIME)
    private Date sendTime;

    @ApiModelProperty(notes = N_READ_TIME, example = E_READ_TIME)
    private Date readTime;

    @ApiModelProperty(notes = N_CHECK_TIME, example = E_CHECK_TIME)
    private Date checkTime;

    @ApiModelProperty(notes = N_WITHDRAWN_TIME, example = E_WITHDRAWN_TIME)
    private Date withdrawnTime;

    @ApiModelProperty(notes = N_PHONE_STATUS, example = E_PHONE_STATUS)
    private Boolean phoneStatus;

    @ApiModelProperty(notes = N_PHONE, example = E_PHONE)
    @Length(max = 32, message = M_PHONE_MAX)
    private String phone;

    @ApiModelProperty(notes = N_EMP_NAME, example = E_EMP_NAME)
    @Length(max = 32, message = M_EMP_NAME_MAX)
    private String empName;

    @ApiModelProperty(notes = N_WECHAT_STATUS, example = E_WECHAT_STATUS)
    private Boolean wechatStatus;

    @ApiModelProperty(notes = N_EMP_NO, example = E_EMP_NO)
    @Length(max = 32, message = M_EMP_NO_MAX)
    private String empNo;

    @ApiModelProperty(notes = N_DEP_ID, example = E_DEP_ID)
    @Length(max = 32, message = M_DEP_ID_MAX)
    private String depId;

    @ApiModelProperty(notes = N_DEP_NAME, example = E_DEP_NAME)
    @Length(max = 255, message = M_DEP_NAME_MAX)
    private String depName;

    @ApiModelProperty(notes = N_POSITION_ID, example = E_POSITION_ID)
    @Length(max = 32, message = M_POSITION_ID_MAX)
    private String positionId;

    @ApiModelProperty(notes = N_POSITION_NAME, example = E_POSITION_NAME)
    @Length(max = 255, message = M_POSITION_NAME_MAX)
    private String positionName;

    @ApiModelProperty(notes = N_DEDUCTION, example = E_DEDUCTION)
    private BigDecimal deduction;

    @ApiModelProperty(notes = N_SALARY_BASIC, example = E_SALARY_BASIC)
    private BigDecimal salaryBasic;

    @ApiModelProperty(notes = N_EMP_SOC, example = E_EMP_SOC)
    private BigDecimal empSoc;

    @ApiModelProperty(notes = N_EMP_PF, example = E_EMP_PF)
    private BigDecimal empPf;

    @ApiModelProperty(notes = N_EMP_TAX, example = E_EMP_TAX)
    private BigDecimal empTax;

    @ApiModelProperty(notes = N_COMPANY_ID, example = E_COMPANY_ID, required = true)
    @NotNull(message = M_COMPANY_ID_NOT_NULL)
    @Length(max = 32, message = M_COMPANY_ID_MAX)
    private String companyId;

    @ApiModelProperty(notes = N_SORT, example = E_SORT)
    private Integer sort;


}

